package com.ghp.web.servlet;

import com.alibaba.fastjson.JSON;
import com.ghp.pojo.User;
import com.ghp.service.UserService;
import com.ghp.service.UserServiceImp;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.URLEncoder;

/**
 * UserServlet主要包含与tb_user表相关的Servlet方法
 * @author ghp
 */
@WebServlet("/user/*")
public class UserServlet extends BaseServlet{
    //1、获取UserService对象
    UserService service = new UserServiceImp();

    /**
     * 判断用户名和密码是否正确
     */
    public void select(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //2、获取请求参数（JSON字符串，Post方式）
        //请求行数据（?、&分割的字符串）
        String remember = req.getParameter("remember");
        //请求体数据（JSON数据）
        BufferedReader br = req.getReader();
        String params = br.readLine();

        //3、处理请求数据，将JSON字符串转成对象（反序列化）
        User user = JSON.parseObject(params, User.class);

        //5、用户名存在就进一步判断密码是否正确
        User u = service.select(user);
        if(u == null){
            //用户信息错误
            resp.getWriter().write("false");
            return;
        }

        //6、用户名和密码都正确，判断需不需要发送Cookie（这一步废了）
        if("true".equals(remember)){
            //用户选中了remember，则发送Cookie
            Cookie c_username = new Cookie("username", URLEncoder.encode(user.getUsername(),"utf-8"));
            Cookie c_password = new Cookie("password",user.getPassword());
            //设置Cookie在浏览器上的保存时长
            c_username.setMaxAge(60*60*24*7);
            c_password.setMaxAge(60*60*24*7);
            //发送Cookie
            resp.addCookie(c_username);
            resp.addCookie(c_password);
        }
    }

    /**
     * 判断用户名是否存在
     */
    public void selectByName(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        //2、获取请求参数
        String username = req.getParameter("username");
        //3、判断用户名是否存在
        User user = service.selectByName(username);
        //4、发送响应数据
        boolean flag = false;
        if (user != null) {
            //用户名存在
            flag = true;
        }
        resp.getWriter().write(""+flag);
    }

    /**
     * 向tb_user表中添加数据
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    public void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        //2、获取请求参数
        BufferedReader br = req.getReader();
        String params = br.readLine();
        //3、将JSON数据转成对象数据（反序列化）
        User user = JSON.parseObject(params, User.class);
        //4、调用service对象的方法，将数据存储导tb_user表中
        service.add(user);
        //5、告诉前端页面数据添加成功
        resp.getWriter().write("success");
    }
}
